Activity এবং Fragment Lifecycle
Activity এবং Fragment এর লাইফসাইকেল Android অ্যাপ্লিকেশনের একটি গুরুত্বপূর্ণ অংশ। এগুলোর লাইফসাইকেল সঠিকভাবে বোঝা অ্যাপের পারফরম্যান্স এবং ব্যবহারকারীর অভিজ্ঞতা উন্নত করতে সাহায্য করে। Activity এবং Fragment এর লাইফসাইকেল ইভেন্টগুলো অ্যাপের ভিন্ন ভিন্ন অবস্থায় কীভাবে আচরণ করবে তা নিয়ন্ত্রণ করে।
নিচে Activity এবং Fragment এর লাইফসাইকেল এবং তাদের গুরুত্বপূর্ণ ইভেন্টসমূহ বিস্তারিতভাবে আলোচনা করা হলো।
Activity Lifecycle
Activity হল Android অ্যাপ্লিকেশনের একটি গুরুত্বপূর্ণ কম্পোনেন্ট, যা ব্যবহারকারীর সাথে ইন্টারঅ্যাকশনের জন্য একটি UI প্রদান করে। Activity এর লাইফসাইকেল ম্যানেজ করা হয় বিভিন্ন মেথডের মাধ্যমে, যা Activity এর বিভিন্ন স্টেট বা পর্যায় নির্দেশ করে।
Activity Lifecycle এর প্রধান মেথডসমূহ
onCreate()
- Activity তৈরি হওয়ার পর এটি প্রথমবার কল করা হয়।
- ইনিশিয়াল UI সেটআপ এবং রিসোর্স ইন্টারনালাইজ করা হয় এখানে।
onStart()
- onCreate() এর পরে এটি কল করা হয় এবং Activity দৃশ্যমান হয়ে ওঠে।
onResume()
- যখন Activity সক্রিয় হয় এবং ব্যবহারকারীর সাথে ইন্টারঅ্যাক্ট করতে প্রস্তুত থাকে, তখন এটি কল করা হয়।
- Activity এখন সম্পূর্ণরূপে দৃশ্যমান এবং ইন্টারঅ্যাক্টেবল।
onPause()
- যখন Activity ব্যাকগ্রাউন্ডে চলে যায়, তবে এখনও দৃশ্যমান থাকে, তখন এটি কল করা হয়।
- এটি সাধারণত সাময়িক কাজ যেমন ব্যাটারি সংরক্ষণ বা ডেটা সংরক্ষণের জন্য ব্যবহৃত হয়।
onStop()
- Activity সম্পূর্ণরূপে দৃশ্যমান নয় এবং ব্যাকগ্রাউন্ডে চলে গেলে এটি কল করা হয়।
onRestart()
- onStop() এর পরে যদি Activity পুনরায় চালু হয়, তবে এটি কল করা হয়।
onDestroy()
- Activity সম্পূর্ণরূপে ধ্বংস হওয়ার আগে এটি কল করা হয়।
Activity Lifecycle এর স্টেট ডায়াগ্রাম

Fragment Lifecycle
Fragment হল একটি ছোট উপাদান যা Activity এর মধ্যে একত্রিত হয়ে কাজ করে। এটি Activity-এর সাথে যুক্ত থেকে, ডেটা শেয়ার করে এবং UI পরিচালনা করে। Fragment এর নিজস্ব লাইফসাইকেল রয়েছে যা Activity এর লাইফসাইকেলের সাথে সংযুক্ত থাকে।
Fragment Lifecycle এর প্রধান মেথডসমূহ
onAttach()
- যখন Fragment প্রথমবার Activity এর সাথে যুক্ত হয়, তখন এটি কল করা হয়।
onCreate()
- Fragment তৈরি হওয়ার পর এটি কল করা হয়।
- UI ইনিশিয়ালাইজেশনের আগে এখানে ইনিশিয়াল সেটআপ করা হয়।
onCreateView()
- Fragment এর জন্য UI ইনফ্লেট করার জন্য এটি কল করা হয়। এটি একটি View রিটার্ন করে যা Fragment এর UI হিসেবে ব্যবহৃত হয়।
onViewCreated()
- যখন Fragment এর ভিউ সম্পূর্ণ তৈরি হয়, তখন এটি কল করা হয়। এখানে ভিউয়ের সাথে ডেটা সেটআপ করা হয়।
onActivityCreated()
- যখন Activity এর onCreate() কল হয় এবং Fragment এর ভিউ সেটআপ হয়, তখন এটি কল করা হয়।
onStart()
- Fragment দৃশ্যমান হয়ে গেলে এটি কল করা হয়।
onResume()
- Fragment সক্রিয় হয়ে গেলে এবং ইন্টারঅ্যাক্ট করার জন্য প্রস্তুত হলে এটি কল করা হয়।
onPause()
- Fragment ব্যাকগ্রাউন্ডে চলে গেলে এটি কল করা হয়।
onStop()
- Fragment সম্পূর্ণরূপে দৃশ্যমান না থাকলে এবং ব্যাকগ্রাউন্ডে গেলে এটি কল করা হয়।
onDestroyView()
- Fragment এর ভিউ যখন ধ্বংস করা হয় তখন এটি কল করা হয়।
onDestroy()
- Fragment ধ্বংস হওয়ার আগে এটি কল করা হয়।
onDetach()
- Fragment যখন Activity থেকে বিচ্ছিন্ন হয়, তখন এটি কল করা হয়।
Fragment Lifecycle এর স্টেট ডায়াগ্রাম

Activity এবং Fragment Lifecycle এর মধ্যে পার্থক্য
| Lifecycle Stage | Activity | Fragment |
|---|---|---|
| Initialization | onCreate() | onCreate(), onAttach() |
| UI Setup | onCreate(), setContentView() | onCreateView(), onViewCreated() |
| Active State | onResume() | onResume() |
| Pausing State | onPause() | onPause() |
| Stopping State | onStop() | onStop(), onDestroyView() |
| Destruction | onDestroy() | onDestroy(), onDetach() |
উপসংহার
Activity এবং Fragment এর লাইফসাইকেল সঠিকভাবে বোঝা এবং ব্যবস্থাপনা করা অত্যন্ত গুরুত্বপূর্ণ। এগুলো সঠিকভাবে পরিচালনা করা অ্যাপ্লিকেশনের পারফরম্যান্স উন্নত করে এবং ব্যবহারকারীর অভিজ্ঞতা উন্নত করে। Fragment এর লাইফসাইকেল Activity এর সাথে যুক্ত হলেও, Fragment এর নিজস্ব একটি লাইফসাইকেল থাকে, যা Activity এর কিছু পর্যায়ের উপর নির্ভরশীল।
Android অ্যাপ্লিকেশনে Activity Lifecycle হল একটি Activity (অ্যাপ্লিকেশনের UI স্ক্রিন) কিভাবে তৈরি হয়, কিভাবে ব্যবহারকারীর সাথে ইন্টারঅ্যাক্ট করে, এবং কিভাবে ধ্বংস হয় তা নিয়ন্ত্রণ করার প্রক্রিয়া। Android অ্যাপ্লিকেশনের প্রতিটি Activity একটি নির্দিষ্ট জীবনচক্র অনুসরণ করে, যা বিভিন্ন স্টেজে বিভক্ত। এই স্টেজগুলোকে ম্যানেজ করার জন্য বিভিন্ন callback methods ব্যবহার করা হয়: onCreate, onStart, onResume, onPause, onStop, এবং onDestroy।
Activity Lifecycle (onCreate, onStart, onResume, onPause, onStop, onDestroy)
নিচে প্রতিটি স্টেজ এবং তার callback method নিয়ে বিস্তারিত আলোচনা করা হলো।
১. onCreate()
- onCreate() হল Activity-এর প্রথম lifecycle method। এটি তখন কল করা হয় যখন Activity প্রথমবার তৈরি হয়।
- এটি Activity-এর প্রাথমিক ইনিশিয়ালাইজেশন এবং সেটআপের জন্য ব্যবহৃত হয়, যেমন UI লোড করা এবং প্রয়োজনীয় ডেটা ইনিশিয়ালাইজ করা।
- setContentView() মেথডটি সাধারণত এখানে কল করা হয়, যা Activity-এর UI লেআউট সেট করে।
উদাহরণ:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// Initialize UI components or variables here
}
২. onStart()
- onStart() মেথডটি onCreate() এর পরে কল করা হয় এবং এটি Activity কে দৃশ্যমান করে।
- এই মেথডে, Activity স্ক্রিনে প্রদর্শিত হয়, কিন্তু এখনও ব্যবহারকারীর সাথে ইন্টারঅ্যাক্ট করার জন্য সম্পূর্ণ প্রস্তুত নয়।
- Activity এই পর্যায়ে foreground এ থাকে, তবে এটি সম্পূর্ণ সক্রিয় নয়।
উদাহরণ:
@Override
protected void onStart() {
super.onStart();
// Activity is now visible to the user
}
৩. onResume()
- onResume() মেথডটি তখন কল করা হয় যখন Activity সম্পূর্ণরূপে দৃশ্যমান হয় এবং ব্যবহারকারীর সাথে ইন্টারঅ্যাক্ট করার জন্য প্রস্তুত হয়।
- এই মেথডটি চলাকালীন Activity পুরোপুরি সক্রিয় (foreground) এবং ব্যবহারকারীর ইনপুট গ্রহণ করে।
- যদি কোনো Activity onPause() বা onStop() অবস্থায় থেকে ফিরে আসে, তাহলে onResume() পুনরায় কল করা হয়।
উদাহরণ:
@Override
protected void onResume() {
super.onResume();
// Activity is now in the foreground and interacting with the user
}
৪. onPause()
- onPause() মেথডটি তখন কল করা হয় যখন Activity আংশিকভাবে দৃশ্যমান থাকে, যেমন কোনো নতুন Activity সামনে চালু হলে।
- Activity এই অবস্থায় ব্যবহারকারীর সাথে ইন্টারঅ্যাক্ট করা বন্ধ করে দেয়, তবে এটি এখনও দৃশ্যমান থাকতে পারে।
- এই মেথডে ডেটা সংরক্ষণ বা সংবেদনশীল কাজ বন্ধ করা উচিত, কারণ Activity শীঘ্রই onStop() অবস্থায় যেতে পারে।
উদাহরণ:
@Override
protected void onPause() {
super.onPause();
// Activity is partially visible but not interacting with the user
}
৫. onStop()
- onStop() মেথডটি তখন কল করা হয় যখন Activity সম্পূর্ণরূপে দৃশ্যমান নয় এবং ব্যাকগ্রাউন্ডে চলে যায়।
- Activity এখন দৃশ্যমান নয় এবং ব্যাকগ্রাউন্ডে চলে যায়, তবে এটি এখনও মেমোরিতে থাকে।
- Activity যখন ব্যাকগ্রাউন্ডে থাকে, তখন এটি রিসোর্স যেমন নেটওয়ার্ক কানেকশন বা ব্যাটারি-ব্যবহারকারী টাস্কগুলো বন্ধ করা উচিত।
উদাহরণ:
@Override
protected void onStop() {
super.onStop();
// Activity is now completely hidden
}
৬. onDestroy()
- onDestroy() মেথডটি Activity সম্পূর্ণরূপে ধ্বংস হওয়ার আগে কল করা হয়। এটি Activity-কে মেমোরি থেকে সরিয়ে ফেলার আগে শেষবারের মতো সম্পাদিত হয়।
- এটি Activity-এর সমস্ত রিসোর্স ক্লিনআপ এবং নির্দিষ্ট কাজ সম্পন্ন করার জন্য ব্যবহার করা হয়, যেমন ডেটা সেভ করা বা ব্যাকগ্রাউন্ড টাস্ক বন্ধ করা।
- onDestroy() মেথডটি তখন কল করা হয় যখন Activity নিজে থেকেই বন্ধ করা হয় বা সিস্টেমের মাধ্যমে বন্ধ হয়।
উদাহরণ:
@Override
protected void onDestroy() {
super.onDestroy();
// Cleanup resources and final actions before destroying the activity
}
Activity Lifecycle Flow Diagram
Android Activity Lifecycle একটি নির্দিষ্ট স্টেজের ক্রম অনুসরণ করে, যার মাধ্যমে Activity তার জীবনচক্র সম্পন্ন করে। একটি সাধারণ Lifecycle Flow নিম্নরূপ:
- onCreate() → Activity তৈরি হয়।
- onStart() → Activity দৃশ্যমান হয়।
- onResume() → Activity সক্রিয় এবং ইন্টারঅ্যাক্টেবল হয়।
- onPause() → Activity ব্যাকগ্রাউন্ডে চলে যায়, কিন্তু আংশিকভাবে দৃশ্যমান থাকে।
- onStop() → Activity সম্পূর্ণরূপে ব্যাকগ্রাউন্ডে চলে যায় এবং দৃশ্যমান নয়।
- onDestroy() → Activity সম্পূর্ণরূপে ধ্বংস হয়ে যায়।
Android Activity Lifecycle Chart

এই চার্টটি Activity এর জীবনচক্রের প্রত্যেকটি স্টেজকে ভিজুয়ালি উপস্থাপন করে। এটি বুঝতে সাহায্য করে কিভাবে Activity বিভিন্ন স্টেজে পরিবর্তিত হয় এবং কিভাবে lifecycle মেথডগুলো একে অপরের সাথে সম্পর্কিত।
উপসংহার
Android এর Activity Lifecycle একটি গুরুত্বপূর্ণ অংশ, যা Activity কীভাবে তৈরি, পরিচালনা, এবং ধ্বংস হবে তা নিয়ন্ত্রণ করে। প্রতিটি callback method একটি নির্দিষ্ট স্টেজে ট্রিগার হয় এবং সঠিকভাবে এগুলো হ্যান্ডেল করে একটি কার্যকরী এবং ব্যাটারি/মেমোরি-অপ্টিমাইজড অ্যাপ্লিকেশন তৈরি করা যায়। Activity lifecycle এর সঠিক ব্যবহারের মাধ্যমে একটি অ্যাপ ব্যবহারকারীর ইন্টারঅ্যাকশনের জন্য সঠিকভাবে প্রস্তুত থাকে এবং সিস্টেমের রিসোর্স সঠিকভাবে ব্যবহার করে।
Fragment Lifecycle এবং Fragment Transactions
Fragment হল Android অ্যাপ্লিকেশনের একটি গুরুত্বপূর্ণ উপাদান, যা একটি Activity এর মধ্যে একাধিক UI বা বায়বীয় ফাংশনালিটি ইনক্লুড করার জন্য ব্যবহৃত হয়। Fragment গুলো Activity এর জীবনচক্রের সাথে যুক্ত থাকে এবং Activity-এর ভেতরে যুক্ত করা বা সরানো যায়। এটি একটি Activity এর ভেতরে পুনঃব্যবহারযোগ্য UI উপাদান বা কম্পোনেন্ট তৈরি করতে সাহায্য করে।
Fragment Lifecycle
Fragment-এর নিজস্ব জীবনচক্র থাকে, যা Activity-এর জীবনচক্রের উপর ভিত্তি করে পরিবর্তিত হয়। নিচে Fragment-এর প্রধান lifecycle মেথড এবং তাদের কাজ নিয়ে আলোচনা করা হলো:
১. onAttach()
- onAttach() মেথডটি তখন কল করা হয় যখন Fragment প্রথমবার Activity এর সাথে সংযুক্ত হয়।
- এটি Activity এর রেফারেন্স নিয়ে কাজ করতে পারে এবং Activity এর সাথে ইন্টারঅ্যাক্ট করতে প্রস্তুতি নেয়।
উদাহরণ:
@Override
public void onAttach(@NonNull Context context) {
super.onAttach(context);
// Fragment is now attached to the Activity
}
২. onCreate()
- onCreate() মেথডটি তখন কল করা হয় যখন Fragment প্রথমবার তৈরি হয়।
- এটি Fragment এর প্রাথমিক সেটআপ বা ইনিশিয়ালাইজেশন করার জন্য ব্যবহৃত হয়। তবে UI সম্পর্কিত কিছু করা হয় না।
উদাহরণ:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Initialize variables or perform setup operations
}
৩. onCreateView()
- onCreateView() মেথডটি তখন কল করা হয় যখন Fragment এর UI তৈরি করার প্রয়োজন হয়।
- এটি একটি View রিটার্ন করে, যা Fragment এর UI হিসেবে কাজ করে। এখানে LayoutInflater এবং ViewGroup ব্যবহার করে লেআউট ইনফ্লেট করা হয়।
উদাহরণ:
@Override
public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
// Inflate the layout for this fragment
return inflater.inflate(R.layout.fragment_example, container, false);
}
৪. onActivityCreated()
- onActivityCreated() মেথডটি তখন কল করা হয় যখন Activity এর onCreate() সম্পন্ন হয়।
- এটি Activity এবং Fragment এর মধ্যে ইন্টারঅ্যাকশনের জন্য ব্যবহৃত হয় এবং UI সম্পর্কিত সেটআপের জন্য এটি উপযুক্ত।
উদাহরণ:
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
// Perform UI setup based on Activity
}
৫. onStart()
- onStart() মেথডটি তখন কল করা হয় যখন Fragment দৃশ্যমান হয়।
- এটি Fragment কে স্ক্রিনে দৃশ্যমান করে এবং এটি UI সম্পর্কিত কাজ করতে পারে।
উদাহরণ:
@Override
public void onStart() {
super.onStart();
// Fragment is now visible
}
৬. onResume()
- onResume() মেথডটি তখন কল করা হয় যখন Fragment ব্যবহারকারীর সাথে ইন্টারঅ্যাক্ট করার জন্য সম্পূর্ণ প্রস্তুত হয়।
- এটি Fragment কে সম্পূর্ণ সক্রিয় এবং ইন্টারঅ্যাকটিভ করে তোলে।
উদাহরণ:
@Override
public void onResume() {
super.onResume();
// Fragment is now interacting with the user
}
৭. onPause()
- onPause() মেথডটি তখন কল করা হয় যখন Fragment ব্যাকগ্রাউন্ডে চলে যায় বা অন্য Fragment বা Activity সামনে আসে।
- এটি সংবেদনশীল কাজ বা রিসোর্স রিলিজ করার জন্য ব্যবহৃত হয়।
উদাহরণ:
@Override
public void onPause() {
super.onPause();
// Fragment is partially visible
}
৮. onStop()
- onStop() মেথডটি তখন কল করা হয় যখন Fragment সম্পূর্ণভাবে দৃশ্যমান নয়।
- এটি ব্যাকগ্রাউন্ডে চলে যায় এবং UI আপডেট বা বড় কাজ স্থগিত করা হয়।
উদাহরণ:
@Override
public void onStop() {
super.onStop();
// Fragment is now completely hidden
}
৯. onDestroyView()
- onDestroyView() মেথডটি তখন কল করা হয় যখন Fragment এর UI ধ্বংস হয়, তবে Fragment এখনও মেমোরিতে থাকে।
- এখানে Fragment এর ভিউ বা UI সম্পর্কিত কাজ বন্ধ করা উচিত।
উদাহরণ:
@Override
public void onDestroyView() {
super.onDestroyView();
// Cleanup UI-related resources
}
১০. onDestroy()
- onDestroy() মেথডটি Fragment সম্পূর্ণরূপে ধ্বংস হওয়ার আগে কল করা হয়। এটি মেমোরি থেকে Fragment সরানোর আগে শেষবারের মতো কল করা হয়।
উদাহরণ:
@Override
public void onDestroy() {
super.onDestroy();
// Cleanup resources before destroying the fragment
}
১১. onDetach()
- onDetach() মেথডটি তখন কল করা হয় যখন Fragment সম্পূর্ণভাবে Activity থেকে বিচ্ছিন্ন হয়।
- এটি Activity এর রেফারেন্স ছেড়ে দেয় এবং Fragment কে বিচ্ছিন্ন করে।
উদাহরণ:
@Override
public void onDetach() {
super.onDetach();
// Fragment is detached from the Activity
}
Fragment Transactions
Fragment Transaction হল একটি প্রক্রিয়া, যা দ্বারা একটি Activity এর মধ্যে Fragment যোগ, সরানো, প্রতিস্থাপন, বা পরিবর্তন করা হয়। Fragment Transaction সাধারণত FragmentManager এবং FragmentTransaction এর মাধ্যমে সম্পন্ন করা হয়।
Fragment Transaction এর ধাপসমূহ:
১. FragmentManager ব্যবহার করে ফ্র্যাগমেন্ট ম্যানেজ করা। ২. FragmentTransaction শুরু করা। ৩. Fragment যোগ করা, প্রতিস্থাপন করা বা সরানো। ৪. Transaction সম্পন্ন করা।
উদাহরণ: Fragment যোগ করা
FragmentManager fragmentManager = getSupportFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
ExampleFragment fragment = new ExampleFragment();
fragmentTransaction.add(R.id.fragment_container, fragment);
fragmentTransaction.commit();
উদাহরণ: Fragment প্রতিস্থাপন করা
FragmentManager fragmentManager = getSupportFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
AnotherFragment anotherFragment = new AnotherFragment();
fragmentTransaction.replace(R.id.fragment_container, anotherFragment);
fragmentTransaction.addToBackStack(null); // Back stack এ যুক্ত করা
fragmentTransaction.commit();
উদাহরণ: Fragment সরানো
FragmentManager fragmentManager = getSupportFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
ExampleFragment fragment = (ExampleFragment) fragmentManager.findFragmentById(R.id.fragment_container);
if (fragment != null) {
fragmentTransaction.remove(fragment);
fragmentTransaction.commit();
}
Fragment Lifecycle এবং Fragment Transaction এর তুলনা
| বৈশিষ্ট্য | Fragment Lifecycle | Fragment Transactions |
|---|---|---|
| ব্যাখ্যা | Fragment কীভাবে তৈরি, ম্যানেজ এবং ধ্বংস হয় তা নির্দেশ করে | Fragment কিভাবে Activity এর মধ্যে যুক্ত, প্রতিস্থাপিত বা সরানো হয় তা নির্দেশ করে |
| উদ্দেশ্য | Fragment এর স্টেট এবং ইন্টারঅ্যাকশন ম্যানেজ করা | Fragment এর পজিশন এবং পরিবর্তন নিয়ন্ত্রণ করা |
| Method Example | onCreate(), onDestroy() | add(), replace(), remove() |
উপসংহার
Fragment এর জীবনচক্র এবং Fragment Transaction Android অ্যাপ্লিকেশন ডেভেলপমেন্টের একটি গুরুত্বপূর্ণ অংশ। Fragment Lifecycle প্রতিটি Fragment কিভাবে কাজ করে এবং Activity এর সাথে সম্পর্কিত থাকে তা নিয়ন্ত্রণ করে। অন্যদিকে, Fragment Transactions Fragment কিভাবে Activity এর মধ্যে পরিচালনা করা হয় তা নিয়ন্ত্রণ করে। Fragment Lifecycle এবং Transaction এর সঠিক ব্যবহার একটি কার্যকরী এবং ব্যবহারবান্ধব অ্যাপ তৈরি করতে সাহায্য করে।
Multi-Activity App তৈরি করা এবং Data Passing
একটি Multi-Activity App এমন একটি অ্যাপ্লিকেশন যা একাধিক Activity ব্যবহার করে। Android অ্যাপ্লিকেশনগুলো প্রায়ই একাধিক Activity নিয়ে গঠিত হয় যেখানে প্রতিটি Activity একটি স্বতন্ত্র UI এবং কার্যকারিতা প্রদান করে। এক Activity থেকে অন্য Activity তে যাওয়ার জন্য এবং ডেটা পাস করার জন্য Intent ব্যবহার করা হয়। Intent এর মাধ্যমে আপনি এক Activity থেকে অন্য Activity তে ডেটা পাঠাতে পারেন, যেমন টেক্সট, সংখ্যা, বা অন্য কোনো তথ্য।
নিচে Multi-Activity App তৈরি করা এবং Data Passing নিয়ে বিস্তারিত আলোচনা করা হলো:
ধাপ ১: নতুন Activity তৈরি করা
প্রথমে আপনার MainActivity থাকবে যা অ্যাপ্লিকেশনের প্রধান স্ক্রিন হিসেবে কাজ করবে। এরপর, একটি নতুন Activity তৈরি করুন যা আপনি SecondActivity হিসেবে ব্যবহার করবেন। Android Studio তে নতুন Activity যোগ করতে:
- File -> New -> Activity -> Empty Activity।
- Activity এর নাম দিন, যেমন SecondActivity।
ধাপ ২: XML লেআউট তৈরি করা
MainActivity এবং SecondActivity এর জন্য XML লেআউট ফাইল তৈরি করা হবে। নিচে একটি উদাহরণ দেওয়া হলো:
MainActivity এর লেআউট (activity_main.xml):
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:padding="16dp">
<EditText
android:id="@+id/inputText"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="Enter some text" />
<Button
android:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Go to Second Activity" />
</LinearLayout>
SecondActivity এর লেআউট (activity_second.xml):
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:padding="16dp">
<TextView
android:id="@+id/receivedText"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="No data received" />
</LinearLayout>
ধাপ ৩: MainActivity এ Intent ব্যবহার করে Data Passing করা
MainActivity থেকে SecondActivity তে Intent ব্যবহার করে ডেটা পাঠানো হবে। Intent হল Android এর একটি কম্পোনেন্ট, যা Activity, Service, এবং অন্যান্য কম্পোনেন্টের মধ্যে যোগাযোগ স্থাপন করতে ব্যবহৃত হয়।
MainActivity.java:
java
Copy code
public class MainActivity extends AppCompatActivity {
private EditText inputText;
private Button button;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
inputText = findViewById(R.id.inputText);
button = findViewById(R.id.button);
button.setOnClickListener(v -> {
String text = inputText.getText().toString();
Intent intent = new Intent(MainActivity.this, SecondActivity.class);
intent.putExtra("key", text);
startActivity(intent);
});
}
}
এখানে onClickListener ব্যবহার করে Button এ ক্লিক করলে Intent তৈরি করা হচ্ছে। Intent.putExtra() মেথড ব্যবহার করে আমরা ডেটা (টেক্সট) পাস করছি, এবং startActivity() এর মাধ্যমে SecondActivity চালু করছি।
ধাপ ৪: SecondActivity তে Data গ্রহণ করা
SecondActivity তে Intent থেকে পাঠানো ডেটা গ্রহণ করতে getIntent().getStringExtra() মেথড ব্যবহার করা হয়।
SecondActivity.java:
public class SecondActivity extends AppCompatActivity {
private TextView receivedText;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_second);
receivedText = findViewById(R.id.receivedText);
// Intent থেকে ডেটা গ্রহণ করা
Intent intent = getIntent();
String receivedData = intent.getStringExtra("key");
// ডেটা TextView তে সেট করা
if (receivedData != null) {
receivedText.setText(receivedData);
}
}
}
এখানে, SecondActivity তে Intent থেকে getStringExtra() মেথড ব্যবহার করে ডেটা গ্রহণ করা হচ্ছে। তারপর সেই ডেটা TextView তে সেট করা হয়েছে।
ধাপ ৫: AndroidManifest.xml এ নতুন Activity যুক্ত করা
প্রতিটি নতুন Activity তৈরি করার পরে AndroidManifest.xml ফাইলে তা যুক্ত করতে হবে। সাধারণত, Android Studio নিজেই এটি যুক্ত করে, তবে আপনি নিশ্চিত করতে পারেন:
<activity android:name=".SecondActivity"></activity>
উপসংহার
এই উদাহরণের মাধ্যমে, আমরা দেখলাম কিভাবে এক Activity থেকে অন্য Activity তে Intent ব্যবহার করে ডেটা পাঠানো যায় এবং সেই ডেটা গ্রহণ করা যায়। Intent এর মাধ্যমে বিভিন্ন ধরনের ডেটা যেমন String, Integer, Boolean ইত্যাদি পাঠানো যায়।
Advanced Data Passing Techniques
Intent এর মাধ্যমে কেবল Primitive ডেটা নয়, বরং Object, ArrayList, এবং Parcelable বা Serializable অবজেক্টও পাঠানো যায়। নিচে কয়েকটি উদাহরণ দেওয়া হলো:
১. Parcelable Object পাঠানো
Parcelable হল Android এর জন্য একটি Object Serialization টেকনিক, যা ডেটা দ্রুত পাস করার জন্য ব্যবহার করা হয়।
MyData.java (Parcelable Object):
public class MyData implements Parcelable {
private String name;
private int age;
public MyData(String name, int age) {
this.name = name;
this.age = age;
}
protected MyData(Parcel in) {
name = in.readString();
age = in.readInt();
}
public static final Creator<MyData> CREATOR = new Creator<MyData>() {
@Override
public MyData createFromParcel(Parcel in) {
return new MyData(in);
}
@Override
public MyData[] newArray(int size) {
return new MyData[size];
}
};
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeString(name);
dest.writeInt(age);
}
@Override
public int describeContents() {
return 0;
}
// Getters for name and age
public String getName() {
return name;
}
public int getAge() {
return age;
}
}
MainActivity থেকে Parcelable পাঠানো:
MyData myData = new MyData("John", 25);
Intent intent = new Intent(MainActivity.this, SecondActivity.class);
intent.putExtra("myData", myData);
startActivity(intent);
SecondActivity তে Parcelable গ্রহণ:
MyData myData = getIntent().getParcelableExtra("myData");
if (myData != null) {
String displayText = "Name: " + myData.getName() + ", Age: " + myData.getAge();
receivedText.setText(displayText);
}
উপসংহার
একটি Multi-Activity অ্যাপ তৈরি করা এবং Activity গুলোর মধ্যে ডেটা পাস করা Android ডেভেলপমেন্টের একটি মৌলিক বিষয়। Intent ব্যবহার করে আপনি সহজেই ডেটা পাস করতে পারেন, এবং Parcelable এর মাধ্যমে জটিল Object গুলোও Activity এর মধ্যে পাঠাতে পারেন। Intent এর সঠিক ব্যবহার একটি অ্যাপ্লিকেশনকে আরও ইন্টারঅ্যাকটিভ এবং ব্যবহারবান্ধব করতে সাহায্য করে।
ViewPager এবং TabLayout ব্যবহার
Android অ্যাপ্লিকেশনে ViewPager এবং TabLayout ব্যবহার করে ব্যবহারকারীর জন্য স্ক্রোলযোগ্য বা স্লাইডযোগ্য ট্যাব এবং পেজ তৈরির জন্য অত্যন্ত কার্যকরী। এটি সাধারণত একটি অ্যানিমেটেড এবং ইন্টারঅ্যাকটিভ UI তৈরি করতে ব্যবহৃত হয়, যেখানে ব্যবহারকারী ট্যাবের মধ্যে সোয়াইপ বা ক্লিক করে বিভিন্ন স্ক্রিন বা কন্টেন্ট দেখতে পারেন।
নিচে ViewPager এবং TabLayout এর ব্যবহার নিয়ে বিস্তারিত আলোচনা এবং উদাহরণ দেওয়া হলো।
১. ViewPager
ViewPager হল একটি Android উপাদান, যা ব্যবহারকারীদের স্ক্রোল বা সোয়াইপ করে বিভিন্ন পেজের মধ্যে নেভিগেট করতে দেয়। এটি একাধিক Fragment বা ভিউ পেজ নিয়ে কাজ করতে পারে, এবং প্রতিটি Fragment আলাদা কন্টেন্ট প্রদর্শন করতে পারে। ViewPager সাধারণত FragmentPagerAdapter বা FragmentStatePagerAdapter ব্যবহার করে পেজ ম্যানেজ করে।
ViewPager সেটআপ:
ধাপ ১: XML ফাইলে ViewPager যোগ করা
<androidx.viewpager.widget.ViewPager
android:id="@+id/viewPager"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
ধাপ ২: Fragment তৈরি করা
প্রথমে বিভিন্ন Fragment তৈরি করুন, যেমন FirstFragment, SecondFragment, এবং ThirdFragment।
FirstFragment.java:
public class FirstFragment extends Fragment {
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
return inflater.inflate(R.layout.fragment_first, container, false);
}
}
ধাপ ৩: ViewPager Adapter তৈরি করা
ViewPagerAdapter.java:
public class ViewPagerAdapter extends FragmentPagerAdapter {
public ViewPagerAdapter(@NonNull FragmentManager fm) {
super(fm);
}
@NonNull
@Override
public Fragment getItem(int position) {
switch (position) {
case 0:
return new FirstFragment();
case 1:
return new SecondFragment();
case 2:
return new ThirdFragment();
default:
return new FirstFragment();
}
}
@Override
public int getCount() {
return 3; // Total number of pages
}
}
ধাপ ৪: MainActivity এ ViewPager সেট করা
public class MainActivity extends AppCompatActivity {
private ViewPager viewPager;
private ViewPagerAdapter adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
viewPager = findViewById(R.id.viewPager);
adapter = new ViewPagerAdapter(getSupportFragmentManager());
viewPager.setAdapter(adapter);
}
}
২. TabLayout
TabLayout হল একটি Material Design কম্পোনেন্ট, যা ট্যাবের মাধ্যমে বিভিন্ন পেজের মধ্যে নেভিগেশন করতে সাহায্য করে। এটি সাধারণত ViewPager এর সাথে যুক্ত করা হয়, যাতে ViewPager এর পেজ পরিবর্তন হলে ট্যাবও পরিবর্তিত হয়।
TabLayout সেটআপ:
ধাপ ১: XML ফাইলে TabLayout এবং ViewPager যোগ করা
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<com.google.android.material.tabs.TabLayout
android:id="@+id/tabLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:tabMode="fixed"
app:tabGravity="fill"/>
<androidx.viewpager.widget.ViewPager
android:id="@+id/viewPager"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
</LinearLayout>
ধাপ ২: MainActivity এ TabLayout এবং ViewPager সংযুক্ত করা
public class MainActivity extends AppCompatActivity {
private ViewPager viewPager;
private ViewPagerAdapter adapter;
private TabLayout tabLayout;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
viewPager = findViewById(R.id.viewPager);
tabLayout = findViewById(R.id.tabLayout);
adapter = new ViewPagerAdapter(getSupportFragmentManager());
viewPager.setAdapter(adapter);
// TabLayout সংযুক্ত করা
tabLayout.setupWithViewPager(viewPager);
// ট্যাবের নাম সেট করা
tabLayout.getTabAt(0).setText("Tab 1");
tabLayout.getTabAt(1).setText("Tab 2");
tabLayout.getTabAt(2).setText("Tab 3");
}
}
সংক্ষিপ্ত ব্যাখ্যা:
- ViewPager এবং TabLayout একত্রে ব্যবহার করে একটি স্ক্রোলযোগ্য বা সোয়াইপযোগ্য UI তৈরি করা হয়।
- setupWithViewPager() মেথডের মাধ্যমে TabLayout এবং ViewPager সংযুক্ত করা হয়, যাতে ব্যবহারকারী ট্যাব ক্লিক করলে পেজ পরিবর্তিত হয় এবং সোয়াইপ করলে ট্যাবও পরিবর্তিত হয়।
৩. TabLayout এবং ViewPager এর বৈশিষ্ট্য
| বৈশিষ্ট্য | TabLayout | ViewPager |
|---|---|---|
| ব্যবহার | ট্যাবের মাধ্যমে নেভিগেশন করা | সোয়াইপ করে পেজ পরিবর্তন করা |
| Interaction | ব্যবহারকারী ট্যাবে ক্লিক করতে পারে | ব্যবহারকারী পেজ সোয়াইপ করতে পারে |
| Design | Material Design স্টাইল অনুযায়ী | অ্যানিমেশন এবং ফ্লুইড ইন্টারফেস |
| Adapter | সরাসরি কোন অ্যাডাপ্টার নেই | FragmentPagerAdapter বা FragmentStatePagerAdapter প্রয়োজন |
উপসংহার
ViewPager এবং TabLayout Android অ্যাপ্লিকেশনে স্ক্রোলযোগ্য এবং সোয়াইপযোগ্য UI তৈরি করার জন্য খুবই গুরুত্বপূর্ণ উপাদান। ViewPager ব্যবহার করে আপনি একাধিক পেজ তৈরি করে সোয়াইপ করার সুবিধা প্রদান করতে পারেন, এবং TabLayout ব্যবহার করে ট্যাব ভিত্তিক নেভিগেশন তৈরি করতে পারেন। এই উপাদানগুলোর সঠিক ব্যবহার অ্যাপ্লিকেশনের ইন্টারফেসকে আরও ইন্টারঅ্যাকটিভ এবং ব্যবহারবান্ধব করে তোলে।
Read more